Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling


Publicatiedatum:
08-09-2026

Inwerkingtreding:
09-09-2026

18.1 Wat is de balans o.b.v. Grootboek?

Concepten

Relaties

Eigenschappen

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: Zorgkantoren-inkoop 18.1
2# Canonical id: MONO-0001- "Wat is de balans o.b.v. Grootboek?"
3# Parameters: ?peildatum
4# Ontologie: versie 3.0.0 of nieuwer
5
6PREFIX onz-fin: <http://purl.org/ozo/onz-fin#>
7prefix onz-zorg:  <http://purl.org/ozo/onz-zorg#>
8PREFIX onz-g: <http://purl.org/ozo/onz-g#>
9PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
10
11SELECT
12(?jaarrekeningpost AS ?Jaarrekeningpost)
13(IF(SUM(?heeftData)>0, SUM(?bedrag_rubriek), "Niet beschikbaar") AS ?Bedrag)
14WHERE {
15    { # Subquery 1: Jaarrekeningposten met bedragen
16        { # Middle select: Bereken het totaal per rubriek (saldo + latere mutaties)
17            SELECT
18            ?rubriek ?jaarrekeningpost_child
19            (SUM(?geld_bedrag_post) + SUM(?saldo_waarde)/COUNT(?saldo_waarde) AS ?bedrag_rubriek)
20            (IF(COUNT(?heeftBeginsaldo)+COUNT(?heeftGrootboekPost)=0, 0, 1) AS ?heeftData)
21
22            WHERE {
23                { # Innermost select:
24                    #  - Haal het meest recente saldo per rubriek op als beginsaldo, 0 indien geen saldo in data
25                    #  - Haal de bijbehorende datum op om alle posten na beginsaldo bij toe te voegen
26                    SELECT
27                    ?rubriek ?jaarrekeningpost_child
28                    (IF(BOUND(?saldo_bedrag), ?saldo_bedrag, 0) AS ?saldo_waarde)
29                    ?peildatum_argument
30                    (IF(BOUND(?saldo_datum), ?saldo_datum, ?unbound) AS ?begin_datum)
31                    ?saldo_datum ?saldo ?heeftBeginsaldo
32
33                    WHERE {
34                        #BIND("2024-12-31"^^xsd:date AS ?peildatum)
35                        BIND(?peildatum as ?peildatum_argument)
36
37                        # Bind jaarrekeningpost_child(jaarrekening subpost)op basis van rubriekCode
38                        {
39
40                            # >>> START BB: BB-010_rubriek_rubriekcode.rq
41                            VALUES ?rubriekType { onz-fin:Grootboekrubriek onz-fin:Grootboekrekening }
42                            ?rubriek a ?rubriekType .
43                            BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
44                            # <<< END BB: BB-010_rubriek_rubriekcode.rq
45
46                            # >>> START BB: BB-003_grootboekmapping_Prismant_zorg.rq
47                            # Prismant: prefix-mapping, want Prismant consolideert niet dus we willen onderliggende rubrieken
48                            # Deze code gaat ervan uit dat alle prismant codes die met cijfers beginnen en 6 cijfers hebben
49                            # Er bestaan ook codes die eruit zien als onz-fin:rubriek05
50                            # deze nemen we bewust niet mee (want dat zijn verzamelniveaus)
51                            VALUES (?prismantPrefix ?jaarrekeningpost_child) {
52                                ("00"    "A.I")
53                                ("01"    "A.II")
54                                ("03"    "A.III")
55                                ("3"     "B.I")
56                                ("12"    "B.II")
57                                ("131"   "B.III")
58                                ("132"   "B.IV")
59                                ("0511"  "D.I")
60                                ("05413" "D.IV")
61                                ("05311" "D.V")
62                                ("05342" "D.V")
63                                ("05423" "D.V")
64                                ("05323" "D.VI")
65                                ("0539"  "D.VII")
66                                ("05493" "D.VII")
67                                ("05915" "D.VII")
68                                ("091"   "D.VIII")
69                                ("06"    "E")
70                                ("07"    "F")
71                                ("14"    "G")
72                                ("15"    "G")
73                            }
74                            # <<< END BB: BB-003_grootboekmapping_Prismant_zorg.rq
75
76                            FILTER(STRSTARTS(?rubriekCode, ?prismantPrefix))
77                        }
78                        UNION
79                        {
80
81                            # >>> START BB: BB-010_rubriek_rubriekcode.rq
82                            VALUES ?rubriekType { onz-fin:Grootboekrubriek onz-fin:Grootboekrekening }
83                            ?rubriek a ?rubriekType .
84                            BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
85                            # <<< END BB: BB-010_rubriek_rubriekcode.rq
86
87                            # >>> START BB: BB-004_grootboekmapping_RGS_zorg_3_8.rq
88                            # RGS: exacte mapping, want RGS consolideert zelf onderliggende rubrieken
89                            # Dit houdt in dat rubrieken naast de directe boekingen ook de totaaltelling
90                            # van alle boekingen op alle onderliggende rubrieken bevatten (algemene uitgangspunten)BELANGRIJK
91                            # We willen dus niet dubbel tellen en vandaar exacte match
92                            VALUES (?rubriekCodeRGS ?jaarrekeningpost_child) {
93                                ("BIva"    "A.I")
94                                ("BMva"    "A.II")
95                                ("BFva"    "A.III")
96                                ("BVrd"    "B.I")
97                                ("BVor"    "B.II")
98                                ("BVfi"    "B.II")
99                                ("BEff"    "B.III")
100                                ("BLim"    "B.IV")
101                                ("BEivGok" "D.I")
102                                ("BEivAgi" "D.II")
103                                ("BEivHer" "D.III")
104                                ("BEivWer" "D.IV")
105                                ("BEivStr" "D.IV")
106                                ("BEivBer" "D.V")
107                                ("BEivBef" "D.VI")
108                                ("BEivOvr" "D.VII")
109                                ("BEivOre" "D.VIII")
110                                ("BVrz"    "E")
111                                ("BLas"    "F")
112                                ("BSch"    "G")
113                            }
114                            # <<< END BB: BB-004_grootboekmapping_RGS_zorg_3_8.rq
115
116                            FILTER(?rubriekCode = ?rubriekCodeRGS)
117                        }
118
119                        OPTIONAL {
120                            ?rubriek onz-g:isAbout ?saldo .
121                            ?saldo
122                            a onz-fin:EindSaldo ;
123                            onz-fin:heeftGeldBedrag ?saldo_bedrag ;
124                            onz-g:hasDate ?saldo_datum .
125
126                            FILTER (?saldo_datum <= ?peildatum_argument)
127
128                            FILTER NOT EXISTS {
129                                ?rubriek onz-g:isAbout ?saldo2 .
130                                ?saldo2
131                                a onz-fin:EindSaldo ;
132                                onz-g:hasDate ?saldo_datum2 .
133
134                                FILTER(?saldo2 != ?saldo)
135                                FILTER (?saldo_datum2 <= ?peildatum_argument)
136                                FILTER (
137                                ?saldo_datum2 > ?saldo_datum
138                                || (
139                                ?saldo_datum2 = ?saldo_datum
140                                && STR(?saldo2) > STR(?saldo)
141                                )
142                                )
143                            }
144                        }
145                        # Bind alleen als er een saldo in de data aanwezig was
146                        BIND(IF(BOUND(?saldo_bedrag), 1, ?unbound) AS ?heeftBeginsaldo)
147
148                    }
149                } # End of innermost query: Alle aanwezige beginsaldos zijn gevonden
150
151                # Selecteer de bijbehorende grootboekpost bij de rubriek
152                OPTIONAL {
153                    ?grootboek_post
154                    a onz-fin:Grootboekpost ;
155                    onz-g:partOf ?rubriek ;
156                    onz-g:hasDate ?datum ;
157                    onz-fin:heeftGeldBedrag ?geld_bedrag_temp .
158                    # Behoud de grootboek post alleen voor de meest specifieke rubriek,
159                    # om dubbeltelling bij meerdere rubrieken te voorkomen
160                    FILTER NOT EXISTS {
161                        ?grootboek_post onz-g:partOf ?specifiekereRubriek .
162                        ?specifiekereRubriek onz-g:partOf+ ?rubriek .
163                    }
164                    FILTER (?datum <= ?peildatum_argument && (?datum > ?begin_datum || !BOUND(?begin_datum)))
165                    BIND (1 AS ?heeftGrootboekPost)
166                }
167                BIND(IF(BOUND(?geld_bedrag_temp), ?geld_bedrag_temp, 0) AS ?geld_bedrag_post)
168
169            } GROUP BY ?rubriek ?jaarrekeningpost_child
170        } # End of middle query: Alle beginsaldos + transacties daarna zijn gevonden (eindtotaal bekend)
171
172        # De rest van subquery 1 breidt de jaarrekeningposten uit met hun bijbehorende totaal posten
173        VALUES (?jaarrekeningpost_child ?jaarrekeningpost_child_uitgebreid) {
174            ("A.I"    "A.I Immateriële vaste activa")
175            ("A.II"   "A.II Materiële vaste activa")
176            ("A.III"  "A.III Financiële vaste activa")
177            ("B.I"    "B.I Voorraden")
178            ("B.II"   "B.II Vorderingen")
179            ("B.III"  "B.III Effecten")
180            ("B.IV"   "B.IV Liquide middelen")
181            ("D.I"    "D.I Gestort en opgevraagd kapitaal")
182            ("D.II"   "D.II Agio") #
183            ("D.III"  "D.III Herwaarderingsreserve")  #
184            ("D.IV"   "D.IV Wettelijke en statutaire reserve")
185            ("D.V"    "D.V Bestemmingsreserve")
186            ("D.VI"   "D.VI Bestemmingsfonds")
187            ("D.VII"  "D.VII Overige reserves")
188            ("D.VIII" "D.VIII Onverdeelde winst")
189            ("E"      "E Voorzieningen")
190            ("F"      "F Langlopende schulden (nog voor meer dan een jaar)")
191            ("G"      "G Kortlopende schulden (ten hoogste 1 jaar)")
192        }
193
194        BIND(
195        IF(STRSTARTS(?jaarrekeningpost_child, "A."), "A Vaste activa",
196        IF(STRSTARTS(?jaarrekeningpost_child, "B."), "B Vlottende activa",
197        IF(STRSTARTS(?jaarrekeningpost_child, "D."), "D Eigen vermogen",
198        ?unbound))) AS ?jaarrekeningpost_parent # Fallback naar ?unbound om dubbeltelling te voorkomen
199        )
200
201        BIND(
202        IF(STRSTARTS(?jaarrekeningpost_child, "A.") || STRSTARTS(?jaarrekeningpost_child, "B."), "C Totaal activa",
203        IF(STRSTARTS(?jaarrekeningpost_child, "D.") || ?jaarrekeningpost_child = "E" || ?jaarrekeningpost_child = "F" || ?jaarrekeningpost_child = "G", "H Totaal passiva",
204        ?unbound)) AS ?jaarrekeningpost_grandparent
205        )
206
207        VALUES ?x {1 2 3}
208        BIND(
209        IF(?x = 1, ?jaarrekeningpost_child_uitgebreid,
210        IF(?x = 2, ?jaarrekeningpost_parent,
211        IF(?x = 3, ?jaarrekeningpost_grandparent,
212        ?unbound))) AS ?jaarrekeningpost
213        )
214        FILTER(BOUND(?jaarrekeningpost))
215    } # End of subquery 1: Alle totalen voor de aanwezige jaarrekeningposten zijn bepaald (inclusief de overkoepelende jaarrekeningposten)
216    UNION
217    { # Subquery 2: Initieer alle jaarrekeningposten met bedrag=0
218
219        VALUES ?jaarrekeningpost {
220            "A.I Immateriële vaste activa"
221            "A.II Materiële vaste activa"
222            "A.III Financiële vaste activa"
223            "A Vaste activa"
224            "B.I Voorraden"
225            "B.II Vorderingen"
226            "B.III Effecten"
227            "B.IV Liquide middelen"
228            "B Vlottende activa"
229            "C Totaal activa"
230            "D.I Gestort en opgevraagd kapitaal"
231            "D.II Agio"
232            "D.III Herwaarderingsreserve"
233            "D.IV Wettelijke en statutaire reserve"
234            "D.V Bestemmingsreserve"
235            "D.VI Bestemmingsfonds"
236            "D.VII Overige reserves"
237            "D.VIII Onverdeelde winst"
238            "D Eigen vermogen"
239            "E Voorzieningen"
240            "F Langlopende schulden (nog voor meer dan een jaar)"
241            "G Kortlopende schulden (ten hoogste 1 jaar)"
242            "H Totaal passiva"
243        }
244
245        BIND(0 AS ?bedrag_rubriek)
246        BIND(0 AS ?heeftData)  # Tijdens initieren is het nog onduidelijk of er data voor de rubriek aanwezig is
247    }
248
249} GROUP BY ?jaarrekeningpost
250ORDER BY ?jaarrekeningpost
251